package com.mihuo.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * MyBatis-Plus 配置类
 *
 * 功能说明：
 * 1. 配置MyBatis-Plus的核心插件
 * 2. 启用声明式事务管理
 * 3. 提供分页、乐观锁、安全阻断等增强功能
 *
 * @author mihuo
 * @version 1.0
 * @date 2025-09-26
 */
@Configuration
@MapperScan("com.mihuo.mapper") // 你的 Mapper 包路径
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

    /**
     * 分页插件配置
     *
     * 功能说明：
     * 1. 自动识别数据库类型并进行分页优化
     * 2. 支持自定义每页最大记录数限制
     * 3. 提供count查询优化
     *
     * @return PaginationInnerInterceptor实例
     */
    @Bean
    public PaginationInnerInterceptor paginationInnerInterceptor() {
        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
        // 设置数据库类型为MySQL[1,5](@ref)
        paginationInterceptor.setDbType(DbType.MYSQL);
        // 设置最大单页限制数量，默认500条，-1表示不受限
        paginationInterceptor.setMaxLimit(1000L);
        // 开启count的join优化，只针对部分left join
        paginationInterceptor.setOptimizeJoin(true);
        // 设置分页溢出处理方式：true-回到首页，false-继续请求(默认)
        paginationInterceptor.setOverflow(false);
        return paginationInterceptor;
    }
}
